Amazon Auroraの監査ログをCloudWatch Logsへ出力できるようになりました
ウィスキー、シガー、パイプをこよなく愛する大栗です。
Auroraではパフォーマンス影響が少ない監査ログを出力することができます。
今までは各Auroraインスタンスのローカルに保存されていましたが、CloudWatch Logsへ出力することができるようになりました!
Monitoring Amazon Aurora Audit Events with Amazon CloudWatch
Auroraの監査ログ
詳しくはこちらのエントリーに書いていますが、通常のMySQLやMariaDBの監査ログと比較してパフォーマンスの影響が少ないことが特徴の監査ログです。しかし、各インスタンスのローカルに保存されていて、内容を確認するためにはコンソールからダウンロードしたり、aws rds download-db-log-file-portion
コマンドを使用する必要がありました。
今回CloudWatch Logsに出力できるようになったため、監査ログの監視がやりやすくなり、長期保存も簡単になりました。
試してみる
Auroraの監査ログをCloudWatch Logsに出力して、内容を監視して通知を行ってみます。
Auroraの監査ログの設定
CloudWatch Logs用のIAM Roleの作成
Aurora用のIAM Roleの作成はこちらも参考になります。
IAMの画面から左のメニューでポリシー
を開き、ポリシーの作成
をクリックします。
ポリシーを作成します。Policy Generatorを選択します。
アクセス許可の編集で以下の内容を設定します。
|効果|アクション|リソース| |---|---|---| |Allow|logs:CreateLogGroup logs:PutRetentionPolicy|arn:aws:logs:*:*:log-group:/aws/rds/* |Allow|logs:CreateLogStream logs:DescribeLogStreams logs:GetLogEvents logs:PutLogEvents|arn:aws:logs:*:*:log-group:/aws/rds/*:log-stream:*|
内容を確認してポリシーを作成します。
IAMの画面から左のメニューでロール
を開き、ロールの作成
をクリックします。
AWS サービス
でRDS
を選択します。
ユースケースの選択
でRDS
を選択して先に進みます。
ここではポリシーを設定せずに先に進みます。なお設定されている権限は不要なので後で消します。
ロールを作成します。
作成Roleを選択して、既存のポリシーをデタッチします。
ポリシーのアタッチ
をクリックします。
先ほど作成したポリシーをアタッチします。
これでRoleにポリシーがアタッチされました。
Auroraの構築
次にAuroraを構築します。
監査ログをCloudWatch Logsへ出力するためのDBパラメータグループの設定を行います。
パラメータグループのメニューを開きパラメータグループの作成
をクリックします。そして、以下の内容でクラスタパラメータグループを作成します。
項目 | 内容 | 備考 |
---|---|---|
パラメータグループファミリー | aurora5.6 | |
タイプ | DB Cluster Parameter Group | |
グループ名 | aurora-audit-1 | 内容は任意です |
説明 | Parameter Group for Aurora Audit | 内容は任意です |
選択したクラスタパラメータグループを選択して、パラメータの編集
をクリックします。
監査ログ関連のパラメータを以下のように編集して保存します。
名前 | 値の編集 | 備考 |
---|---|---|
server_audit_events | CONNECT, QUERY, QUERY_DCL, QUERY_DDL, QUERY_DML, TABLE | 全ての監査ログを出力 |
server_audit_excl_users | 全ユーザを対象 | |
server_audit_incl_users | 全ユーザを対象 | |
server_audit_logging | 1 | 監査ログの有効化 |
server_audit_logs_upload | 1 | <-New CloudWatcg Logsへのアップロードを有効にします |
aws_default_logs_role | arn:aws:iam::123456789012:role/aurora-audit | <-New 作成したIAM RoleのARN |
Auroraを起動します。起動時に作成したDBクラスタパラメータグループを設定します。
Auroraを起動したら、メニューのクラスター
で起動したAuroraクラスタを選択して、IAM ロールの管理
をクリックします。
作成したIAM Roleを設定して完了します。
CloudWatch Logsを確認するとロググループが作成されています。ロググループ名は/aws/rds/cluster/<Auroraクラスタ名>/audit
となります。
ログストリームは<Auroraインスタンス名>.audit.log.X.YYYY-MM-DD-HH-MI.0.X
の形式で出力されるようです。
監査ログの監視設定
log2snsのlogs2sns.yml
を使用します。log2snsについては、こちらのエントリーを御覧ください。
今回はログイン失敗を監視したいので、パラメータを以下で設定しました。
パラメータ | 設定内容 | 備考 |
---|---|---|
FilterPattern | /,FAILED_CONNECT,/ | 監視する正規表現 |
FilterPatternExcluded | /$^/ | 監視を除外する正規表現 |
MailSubject | Aurora Login Failure | メールのタイトル |
NotifyTopicName | AuroraAuditNotifyTopic | SNSトピックの名前 |
log2snsのCloudFormationスタックを作成したら、作成したSNSトピックにメール通知を登録します。
通知する
CloudWatch Logsで監査ログのロググループを選択して、Lambda サービスへのストリーミングの開始
をクリックします。
log2snsのLambdaを選択します。
ログの形式をその他
にします。今回は特にフィルタんリングを設定せずに先に進めます。
内容を確認してストリーミングを開始します。
Auroraのログインを失敗してみます。存在しないユーザFAILUSER
でログインを試みますが、ログインに失敗します。
$ mysql -u FAILUSER -p -h mycluster-audit.cluster-a1b2c3d4e5f6.ap-northeast-1.rds.amazonaws.com Enter password: ERROR 1045 (28000): Access denied for user 'FAILUSER'@'172.31.26.6' (using password: NO)
すると、こんなメールが届きます。FAILUSER
ユーザでFAILED_CONNECT
になっていることが分かります。
さいごに
今までは監査ログはaws rds download-db-log-file-portion
コマンドで定期的にダウンロードする必要があり、内容の差分も取れないので、監視が難しい状態でした。CloudWatch Logsへ出力できるようになって監視や長期保存が簡単に行えるようになりました。
今後はAurora以外のDBエンジンや、監査ログ以外のログもCloudWatch Logsへ出力できるようになってくれたら、より監視が楽になるのでアップデートを期待しています!